package demo

import (
	"fmt"

	"gorm.io/gorm"
)

func Transaction() {
	Init()
	// DB.AutoMigrate(&User{})
	var zhangsan = User{Id: 1}
	var lisi = User{Id: 2}
	//自动事务
	// err := DB.Transaction(func(tx *gorm.DB) error {
	// 	err := tx.Model(&zhangsan).Update("money", gorm.Expr("money - ?", 100)).Error
	// 	if err != nil {
	// 		return err
	// 	}

	// 	err = tx.Model(&lisi).Update("money", gorm.Expr("money + ?", 100)).Error
	// 	if err != nil {
	// 		return err
	// 	}
	// 	return nil
	// })

	//手动事务
	tx := DB.Begin()
	defer func() {
		if r := recover(); r != nil {
			tx.Rollback()
		}
	}()
	err := tx.Model(&zhangsan).Update("money", gorm.Expr("money + ?", 100)).Error
	if err != nil {
		tx.Rollback()
		return
	}
	err = tx.Model(&lisi).Update("money", gorm.Expr("money - ?", 100)).Error
	if err != nil {
		tx.Rollback()
		return
	}
	tx.Commit()
	fmt.Println(err)
}
